package model

import (
    "fmt"
    "github.com/sirupsen/logrus"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "gorm.io/gorm/schema"
    "time"
    "yi-shou-backstage/config"
)

var db *gorm.DB
var err error

// mysql 连接初始化
func init(){
    mysqlConf := config.Conf.Mysql
    // 创建数据库连接
    dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
        mysqlConf.User , mysqlConf.PassWord, mysqlConf.Host, mysqlConf.Port, mysqlConf.DataBase)

    db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
        NamingStrategy: schema.NamingStrategy{
            //TablePrefix: "",  // 设置表明前缀
            SingularTable: true, // 使用单数表名，启用该选项后，`User` 表将是`user`
        },
    })
    if err != nil {
        logrus.Errorf("Failed connect to database, error：%s \n", err)
    }

    // AutoMigrate会自动帮忙更新迁移数据表
    db.AutoMigrate(&User{}, &Image{}, &Channel{}, &Article{}, &Comment{})

    // GORM 使用 database/sql 维护连接池
    sqlDB, err := db.DB()
    if err != nil {
        logrus.Errorf("创建数据路连接池失败：%s \n", err)
    }
    // SetMaxIdleConns 设置空闲连接池中连接的最大数量
    sqlDB.SetMaxIdleConns(10)
    // SetMaxOpenConns 设置打开数据库连接的最大数量。
    sqlDB.SetMaxOpenConns(100)
    // SetConnMaxLifetime 设置了连接可复用的最大时间（不要大于框架的timeout时间）
    sqlDB.SetConnMaxLifetime(10*time.Second)

    //db.close()
}
